/*
定义字符数组
用来存放字符数据的数组是字符数组
字符数组中的一个元素存放一个字符
定义字符数组的方法与定义数值型数组的方法类似

char c[10];
c[0] = 'I'; c[1] = ' '; c[2] = 'a';
c[3] = 'm'; c[4] = ' '; c[5] = 'h';
c[6] = 'a'; c[7] = 'p'; c[8] = 'p';
c[9] = 'y';
// c[0]c[1]c[2]c[3]c[4]c[5]c[6]c[7]c[8]c[9]
//   I       a   m       h   a   p   p   y

char c[10]={'I',' ','a','m',' ','h','a','p','p','y'};
// c[0]c[1]c[2]c[3]c[4]c[5]c[6]c[7]c[8]c[9]
//   I       a   m       h   a   p   p   y

char c[10]={'c',' ','p','r','o','g','r','a','m'};
// c[0]c[1]c[2]c[3]c[4]c[5]c[6]c[7]c[8]c[9]
//   c       p   r   o   g   r   a   m   \0

char c[] = {"I am happy"};
// 可写成
char c[] = "I am happy";
// 相当于
char c[11] = {"I am happy"};

char c[10] = {"China"};
可写成
char c[10] = "China";
从 c[5] 开始，元素值均为 \0
C h i n a \0 \0 \0 \0 \0
只显示
printf("%s",c);

字符串结束标志
- 在C语言中，是将字符串作为字符数组来处理的
- 关心的是字符串的有效长度而不是字符数组的长度
- 为了测定字符串的实际长度，C语言规定了字符串结束标志'\0'
- '\0'代表ASCII码为0的字符
- 从ASCII码表可以查到，ASCII码为0的字符不是一个可以显示的字符，而是一个“空操作符"，即它什么也不做
- 用它作为字符串结束标志不会产生附加的操作或增加有效字符，只起一个供辨别的标志

- 字符数组的输入输出可以有两种方法:
  - 逐个字符输入输出（%c）
  - 整个字符串一次输入输出（%s）
- 输出的字符中不包括结束符'\0'
- 用%s输出字符串时，printf函数中的输出项是字符数组名，不是数组元素名
- 如果一个字符数组中包含多个'\0'，则遇第一个'\0'时输出就结束
- 可以用scanf函数输入一个字符串
- scanf函数中的输入项c是已定义的字符数组名，输入的字符串应短于已定义的字符数组的长度

char c[6];
scanf("%s",c);   China↙
系统自动在China后面加一个'\0'

char str1[5],str2[5],str3[5];
scanf(”%s%s%s”,str1,str2,str3);
How are you? ↙
str1: H o w \0 \0
str2: a r e \0 \0
str3: y o u ? \0
*/
#include <stdio.h>
#include <string.h>
int main()
{
    /*
    输出一个已知的字符串
    - 定义一个字符数组，并用“初始化列表"对其赋以初值
    - 用循环逐个输出此字符数组中的字符
    */
    char c[15] = {'I', ' ', 'a', 'm', ' ', 'a',
                  ' ', 's', 't', 'u', 'd', 'e', 'n', 't', '.'};
    int len, i;
    len = strlen(c);
    for (i = 0; i < len; i++)
        printf("%c", c[i]);
    // I am student.
    printf("\n");

    /*
    输出一个菱形图
    - 定义一个字符型的二维数组，用“初始化列表"进行初始化
    - 用嵌套的for循环输出字符数组中的所有元素。
    */
    char diamond[][5] = {{' ', ' ', '*'},
                         {' ', '*', ' ', '*'},
                         {'*', ' ', ' ', ' ', '*'},
                         {' ', '*', ' ', '*'},
                         {' ', ' ', '*'}};
    int i, j;
    for (i = 0; i < 5; i++)
    {
        for (j = 0; j < 5; j++)
            printf("%c", diamond[i][j]);
        printf("\n");
    }
    return 0;
}